In high performance computing (HPC) used in computing centers and the like, jobs are assigned to computational resources of compute nodes such that the computational resources are used fairly and efficiently. Each job is executed on a compute node allocated to the job. Upon completion of execution of the job, the resources allocated to the job are released.
Apparatuses that provide computational resources for HPC include personal computer (PC) clusters, symmetric multiple processor (SMP) machines, supercomputers with dedicated hardware, and various other apparatuses. Computational resources may also be referred to simply as “resources”. There are various types of resources. For example, processors and memories are one type of resources. Processors that serve as resources are not limited to central processing units (CPUs), but include various other computational resources such as general-purpose computing on graphics processing units (GPGPUs), many-core processors, and the like. In the case of multi-core processors, each processor core (hereinafter referred to simply as a “core”) may be handled as an individual resource.
The processing content of jobs that are executed varies widely, including structural analysis, fluid analysis, and the like. Further, the types of jobs include a sequential job that is executed on a single core, and a parallel job that is executed on a plurality of cores. A parallel job may be processed by a plurality of cores of a single compute node or may be processed by a plurality of compute nodes in parallel. Accordingly, the compute node to be allocated to the job needs to have the number of available cores corresponding to the number of cores to be used for executing the job. Further, the amount of memory used by the job varies depending on its processing content. Accordingly, the compute node to be allocated to the job needs to have the amount of available memory corresponding to the amount of memory used by the job.
Assigning jobs to resources is called job scheduling. The amount of available resources that the assignment destination needs to have differs from job to job. Accordingly, in job scheduling, a determination of whether it is possible to assign a job is made for each of compute nodes. Note that assigning jobs to resources of compute nodes is often also called as allocating resources to jobs. One technique related to allocating resources to jobs is to provide a job class definition table storing in advance information indicating the number of processors (the maximum value) that may be used at the same time by a job of each job class, a processor group corresponding to the job class, and so on. With this technique, the number of processors and the processor group corresponding to a job requested to be executed are calculated by referring to the job class definition table. Then, processors are allocated.
See, for example, Japanese Laid-open Patent Publication No. 07-200496.
However, the currently available job scheduling techniques are not able to effectively cope with an increasing system size. Therefore, as the system size increases, the processing time for job scheduling increases. That is, as the system size increases and hence the number of compute nodes increases, a determination of whether it is possible to assign a job to a compute node is made more frequently. As a result, the processing time for job scheduling becomes longer.
A longer processing time for job scheduling results in a lower processing efficiency of the entire system. For example, as the processing time for job scheduling becomes longer, a delay in instructing a compute node to execute a job increases accordingly. Further, it is not allowed to perform processing such as operating jobs, receiving commands, and the like, while updating the schedule. Therefore, various operations such as operating jobs and the like are delayed.